#ifndef SYMLIST_H_
#define SYMLIST_H_

#ifndef SYMBOL_H_
#   include "symbol.h"
#endif

typedef struct      SYMLIST_
    {
    void*           Dummy_;
    }               SYMLIST_, *SYMLIST;


SYMLIST     SymListCreate(void);
//#ifdef MEMWATCH
//#   define  SymListCreate() (SYMLIST)mwMark((void*)SymListCreate(), "symbol list", __FILE__, __LINE__)
//#endif
SYMLIST     SymListDestroy(SYMLIST List);
//#ifdef MEMWATCH
//#   define  SymListDestroy(List) ((List)?(mwUnmark(List, __FILE__, __LINE__),SymListDestroy(List)):NULL)
//#endif
SYMLIST     SymListAdd(SYMLIST List, SYMBOL Symbol);
//#ifdef MEMWATCH
#if 0
#   define  SymListAdd(List, Symbol) List?SymListAdd(List,Symbol):(SYMLIST)mwMark(SymListAdd(List,Symbol), "SymListAdd", __FILE__, __LINE__);
#endif
SYMLIST     SymListAddFirst(SYMLIST List, SYMBOL ProdItem);
int         SymListAddList(SYMLIST* List, SYMLIST Add);
SYMLIST     SymListAddUnique(SYMLIST Handle, SYMBOL Symbol);
int         SymListCount(SYMLIST List);
int         SymListCountSig(SYMLIST List);
SYMLIST     SymListCopy(SYMLIST To, SYMLIST From);
SYMBOL    SymListGet(SYMLIST List, int Index);
int         SymListEqual(SYMLIST A, SYMLIST B);
SYMBOL    SymListFind(SYMLIST List, TToken Token);
int         SymListIndex(SYMLIST List, SYMBOL Symbol);
int         SymListRemove(SYMLIST List, SYMBOL Symbol);
SYMLIST     SymListTruncate(SYMLIST List, int NewLen);
SYMBOL    SymListDelete(SYMLIST List, int Position);
int         SymListContains(SYMLIST List, SYMBOL Symbol);
SYMLIST     SymListIntersect(SYMLIST List, SYMLIST With);
int         SymListDump(FILE* Handle, SYMLIST List, const char* Sep);
char*       SymListDumpStr(SYMLIST List, const char* Sep);
#define     SymListPush SymListAdd
/* void        SymListPush(SYMLIST List, SYMBOL Symbol);*/
SYMBOL    SymListPop(SYMLIST List);
SYMBOL    SymListTop(SYMLIST List);
SYMLIST     SymListReplace(SYMLIST List, int Pos, SYMLIST Insert);

#endif
